package cn.amebius.simpledocker.controller;

import cn.amebius.simpledocker.controller.request.AddUserRequest;
import cn.amebius.simpledocker.controller.response.UserBaseInfoResponse;
import cn.amebius.simpledocker.entity.dto.UserBaseInfoDto;
import cn.amebius.simpledocker.entity.dto.UserGroupInfoDto;
import cn.amebius.simpledocker.entity.dto.UserPageDto;
import cn.amebius.simpledocker.entity.dto.UserRoleInfoDto;
import cn.amebius.simpledocker.entity.model.PageModel;
import cn.amebius.simpledocker.service.UserService;
import cn.amebius.simpledocker.util.PageRequest;
import cn.amebius.simpledocker.util.PageResponse;
import cn.amebius.simpledocker.util.Response;
import cn.dev33.satoken.stp.StpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Set;

/**
 * 用户操作接口
 * @author 阿伟
 * @date 2023/7/28 15:45
 */
@RestController
@RequestMapping("/api/user")
@Slf4j
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 用户获取基础信息
     * @return 用户基础信息
     */
    @GetMapping("/baseInfo")
    public Response<UserBaseInfoResponse> getBaseInfo() {
        UserBaseInfoResponse bir = new UserBaseInfoResponse();
        Integer userId = StpUtil.getLoginIdAsInt();
        //用户信息
        UserBaseInfoDto ubid = userService.getBaseInfo(userId);
        bir.setUserInfo(ubid);
        //用户角色
        UserRoleInfoDto urid = userService.getUserRole(userId);
        bir.setUserRole(urid);
        //用户权限组
        Set<String> up = userService.getUserPermission(userId);
        bir.setUserPermission(up);
        //组信息
        UserGroupInfoDto ugid = userService.getUserGroup(userId);
        bir.setUserGroup(ugid);
        return Response.ok(bir);
    }


    /**
     * @param pr 分页参数
     * @return 用户分页数据
     */
    @GetMapping("/list")
    public PageResponse getUserList(@RequestBody PageRequest pr) {
        pr.checkParameter();
        PageModel<UserPageDto> userPage = userService.getUserPage(pr);
        return PageResponse.ok(userPage);
    }

    @PostMapping("/add")
    public Response<String> addUser(@RequestBody AddUserRequest aur) {
        aur.checkParameter();
        userService.addUser(aur);
        return Response.ok("成功！");
    }


}
